import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);


// 导入获取用户信息接口 & 购物车数据
import { getUserInfo, getCartList } from "@/api";


export default new Vuex.Store({
  state: {
    token: sessionStorage.getItem('token') ? sessionStorage.getItem('token') : '',
    isLogin: sessionStorage.getItem('isLogin') ? sessionStorage.getItem('isLogin') : false,
    userInfo: null,
    cartList: [],
    badgeCount: 0,
    allChecked: false
  },
  getters: {
    getIsLogin(state) {
      // console.log('=======3=======');
      return state.isLogin
    },
    getToken(state) {
      return state.token
    },
    getBadgeCount(state) {
      return state.badgeCount
    },
    getCartData(state) {
      return state.cartList
    },
    // 直接 获取总价格， 当 cartList数据发生变化 总价计算逻辑 在使用总价格数据的时候 会重新执行
    getCountPrice(state) {
      let countPrice = 0
      state.cartList.forEach(item => {
        if (item.checked) {
          countPrice += (item.count * item.price)
        }
      })
      return countPrice
    }
  },
  mutations: {
    setToken(state, params) {
      // console.log('----1-------');
      sessionStorage.setItem('token', params.token)
      sessionStorage.setItem('isLogin', true)
      state.token = params.token
      state.isLogin = true
      // console.log('----2------');
    },
    // 设置用户信息
    setUserInfo(state, params) {
      state.userInfo = params
    },
    // 设置购物车数据
    setCartList(state, params) {
      state.cartList = params
    },
    setBadgeCount(state, params) {
      state.badgeCount = params
    },
    setAllChecked(state, params) {
      state.allChecked = params
    }
  },
  actions: {
    getInfo(state) {
      // console.log('可以在这里获取用户信息');
      // 登录完成 获取用户信息
      getUserInfo(res => {
        // console.log('得到用户信息', res);
        state.commit('setUserInfo', res.data)
      })
    },
    getCartData(state) {
      getCartList((res) => {
        // 从购物车数据中得到 总商品数据量
        if ( res.status === 0) {
          const list = res.data
          let count = 0
          list.forEach(element => {
            // 得到每件商品的数据
            count += element.count
            element.checked = false
          });
          state.commit('setBadgeCount', count)
          state.commit('setCartList', list)
        }

      });
    },
    // 处理单选事件
    changeChecked(state) {
      let checked = true
      // let countPrice = 0
      state.getters.getCartData.forEach(item => {
        if (!item.checked) {
          checked = false
        } 
        // else {
        // // 计算单选 之后的 所有商品总价格
        //   countPrice += (item.count * item.price)
        // }
      })
      // console.log(countPrice);

      state.commit('setAllChecked', checked)
    },
    // 处理全选事件
    changeAllChecked(data) {
      // let countPrice = 0
      data.state.cartList.forEach(item => {
        // 改变 购物车 数据的 选择状态
        item.checked = !data.state.allChecked
        // if (!data.state.allChecked) {
        //   countPrice += (item.count * item.price)
        // }
      })
      // console.log(countPrice);
      // 改变全选 状态
      data.commit('setAllChecked', !data.state.allChecked)
    }
  }
});
